/// 
/// MaDAson - Toolkit for Model Driven Software Development
/// 
/// Copyright [2006] Marcus Lankenau
/// 
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///  
///     http://www.apache.org/licenses/LICENSE-2.0
///  
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
/// 

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Core;
using NUnit.Framework;
using System.IO;
using System.Xml;

namespace Madason.MetaModel.Transformation.Tests
{
	[TestFixture]
	public class TestRuleParser
	{
		string testRuleXml =
			@"<transformations>" +
			@"<rule scope=""Class"" stereotype=""entity"" target=""Madason.MetaModel.Entity""/>" +
			@"<rule scope=""Attribute"" parentStereotype=""entity"" target=""Madason.MetaModel.PersistedAttribute""/>" +
			@"<rule scope=""Operation"" parentStereotype=""finder"" target=""Madason.MetaModel.Finder""/>" +
			@"<rule scope=""Association"" parentStereotype=""assoc"" target=""Madason.MetaModel.Assoc""/>" +
			@"</transformations>";

		RuleList rules = null;

		[SetUp]
		public void Setup()
		{
			StringReader stringReader = new StringReader(testRuleXml);
			rules = RuleParser.Load(new XmlTextReader(stringReader));
		}


		[Test]
		public void TestRulesLoaded()
		{
			Assert.AreEqual(4, rules.Count);
		}

		[Test]
		public void TestRuleScope()
		{
			Assert.AreEqual(RuleScope.Class, rules[0].Scope);
			Assert.AreEqual(RuleScope.Attribute, rules[1].Scope);
			Assert.AreEqual(RuleScope.Operation, rules[2].Scope);
			Assert.AreEqual(RuleScope.Association, rules[3].Scope);
		}

		[Test]
		public void TestStereotype()
		{
			Assert.AreEqual("entity", rules[0].Stereotype);			
		}

		[Test]
		public void TestParentStereotype()
		{
			Assert.AreEqual("entity", rules[1].ParentStereotype);
		}

		[Test]
		public void TestTarget()
		{
			Assert.AreEqual("Madason.MetaModel.Entity", rules[0].Target);
			Assert.AreEqual("Madason.MetaModel.PersistedAttribute", rules[1].Target);
		}
	}
}
